package experto;
import java.util.ArrayList;
import java.util.List;

import model.Alumno;
import model.Proyecto;
import model.Universidad;
import persistencia.FachadaPersistencia;
import persistencia.TipoEntidad;
import acceso.universidad.AdaptadorAccesoUniversidad;
import acceso.universidad.FabricaAdaptadorUniversidad;
import busqueda.criterio.AtributoAlumno;
import busqueda.criterio.AtributoProyecto;
import busqueda.criterio.AtributoUniversidad;
import busqueda.criterio.Criterio;
import busqueda.criterio.CriterioAlumno;
import busqueda.criterio.CriterioCompuesto;
import busqueda.criterio.CriterioProyecto;
import busqueda.criterio.CriterioUniversidad;
import busqueda.criterio.TipoOperador;
import dto.AlumnoDTO;
import dto.EstadoAcademicoDTO;
import dto.ProyectoEmpresaDTO;


public class ExpertoRegistrarPostulacion {
	
	/**
	 * busca el alumno
	 * @param legajo
	 * @return
	 */
	public AlumnoDTO getDatosAlumno(String legajo) {
		AlumnoDTO alumnoDTO = null;
		CriterioAlumno criterio = new CriterioAlumno(AtributoAlumno.LEGAJO, TipoOperador.IGUAL, legajo);
		CriterioCompuesto criterioCompuesto = new CriterioCompuesto();
		criterioCompuesto.addCriterio(criterio);
		List<Alumno> alumnos= (List<Alumno>)FachadaPersistencia.getInstance().buscar(TipoEntidad.ALUMNO, criterioCompuesto);
		if( alumnos != null ) {
			for(Alumno alumno:alumnos){
				alumnoDTO = new AlumnoDTO();
				alumnoDTO.setLegajo(alumno.getLegajo());
				alumnoDTO.setNombre(alumno.getNombre());
			}
		}
		return alumnoDTO;
	}
	/**
	 * busca todos los proyectos de la universidad del alumno
	 * @param codigoUniversidad
	 * @param dni
	 * @return
	 */
	public List<ProyectoEmpresaDTO> listarProyectos(String codUniversidad ,String legajo) {
		boolean esRegular = true;
		List<ProyectoEmpresaDTO> proyectoEmpresaDTOs = new ArrayList<ProyectoEmpresaDTO>();
		
		Criterio criterioAlumno = new Criterio(AtributoAlumno.LEGAJO, TipoOperador.IGUAL, legajo);
		CriterioCompuesto cCompuestoAlumno = new CriterioCompuesto();
		cCompuestoAlumno.addCriterio(criterioAlumno);
		List<Alumno> alumnos = (List<Alumno>)FachadaPersistencia.getInstance().buscar(TipoEntidad.ALUMNO, cCompuestoAlumno);
		
		CriterioUniversidad cUniversidad = new CriterioUniversidad(AtributoUniversidad.CODIGO, TipoOperador.IGUAL, codUniversidad);
		CriterioCompuesto cCompuestoUniversidad = new CriterioCompuesto();
		cCompuestoUniversidad.addCriterio(cUniversidad);
		List<Universidad> universidades = (List<Universidad>)FachadaPersistencia.getInstance().buscar(TipoEntidad.UNIVERSIDAD, cCompuestoUniversidad);
		
		if(universidades!=null && !universidades.isEmpty() && alumnos !=null && !alumnos.isEmpty()){
			AdaptadorAccesoUniversidad adaptadorUniversidad = FabricaAdaptadorUniversidad.getInstance().getAdaptadorUniversidad(universidades.get(0));
			List<EstadoAcademicoDTO> academicoDTOs = adaptadorUniversidad.getEstadoAcademico(alumnos.get(0).getTipoDocumento(), alumnos.get(0).getNumeroDocumento());
			for(EstadoAcademicoDTO estado: academicoDTOs){
				if(!estado.getEstadoAcademico().equalsIgnoreCase("REGULAR")){
					esRegular = false;
				}
			}
			if(esRegular){
				if(verificarContratosVigentes()){
					//TODO:ver como traer una lista de cosas
					CriterioProyecto cProyecto = new CriterioProyecto(AtributoProyecto.TODOS, TipoOperador.IGUAL, "1");
					CriterioCompuesto cCProyecto = new CriterioCompuesto();
					cCProyecto.addCriterio(cProyecto);
					List<Proyecto> proyectos = (List<Proyecto>)FachadaPersistencia.getInstance().buscar(TipoEntidad.PROYECTO, cCProyecto);
					if(proyectos != null){
						for(Proyecto p : proyectos){
							if(p.getUniversidad().getCodigo().equalsIgnoreCase(codUniversidad)){
								if(p.getEstadoActual().getNombre().equalsIgnoreCase("HABILITADO")){
									ProyectoEmpresaDTO dto = new ProyectoEmpresaDTO();
									dto.setHabilidadesProyecto(p.getHabilidades());
									dto.setNombreEmpresa(p.getEmpresa().getNombre());
									dto.setNombreProyecto(p.getNombre());
									dto.setCodigoProyecto(p.getCodigo());
									proyectoEmpresaDTOs.add(dto);
								}
							}
						}
					}
					
				}
			}
			
		}
		return proyectoEmpresaDTOs;
	}
	private boolean verificarContratosVigentes(){
		return true;
	}
}
